Python网络爬虫:批量下载喜马拉雅音频 | 您所在的位置:网站首页 › 喜马拉雅 mp3 下载 › Python网络爬虫:批量下载喜马拉雅音频 |
hello,大家好,我是wangzirui32,今天我们来学习如何批量下载喜马拉雅音频。 开始学习吧! 学习目录 1. 解析网站1.1 获取音频地址1.2 解析专栏网页1.3 整理亿下思路 2. 编写爬取代码 1. 解析网站 1.1 获取音频地址在喜马拉雅网站上,随便点开一个音频,打开“开发者工具”,再点击播放按钮,可以看到出现了多个请求: 发现url中的id参数就决定了返回的音频地址,而id参数是音频的id号。 1.2 解析专栏网页我们已经知道了获取音频url的网址,接下来要获取一个专栏内的音频id和名称,打开一个专栏,发现: 思路: 获取专栏内的li标签获取li标签里的第一个a标签读取a标签的title和href属性将href解析成音频id将id带入url请求音频源地址提取音频源地址请求音频源地址保存音频(文件名为a的title属性)思路整理完了,开始编写代码。 2. 编写爬取代码代码奉上—— import requests from fake_useragent import UserAgent as ua from bs4 import BeautifulSoup as bs # 专栏地址 music_list_url = 'https://www.ximalaya.com/ertongjiaoyu/19702607/' # 获取音频地址的url get_link_url = "https://www.ximalaya.com/revision/play/v1/audio" # UA伪装 headers = { "User-Agent": ua().random } # 参数 params = { "id": None, # id先设为None "ptype": "1", } # 获取专栏HTML源码 music_list_r = requests.get(music_list_url, headers=headers) # 解析 获取所有li标签 soup = bs(music_list_r.text, "lxml") li = soup.find_all("li", {"class": "lF_"}) # for循序遍历处理 for i in li: a = i.find("a") # 找到a标签 # 获取href属性 # split("/")将字符串以"/"作为分隔符 从右往左数第一项是id号 music_id = a.get("href").split("/")[-1] # 获取title属性 和“.m4a”拼接成文件名 music_name = a.get("title") + ".m4a" # 修改请求参数id params['id'] = music_id # 获得音频源地址 r = requests.get(get_link_url, headers=headers, params=params) link = r.json()['data']['src'] # 获取音频文件并保存 music_file = requests.get(link).content with open(music_name, "wb") as f: f.write(music_file) print("下载完毕!")运行代码,等待亿会(真的要等亿会),可以看到当前目录下已经出现了音频文件,如图: 好了,今天的课程就到这里,你也可以对这个程序进行拓展,如加入多线程爬虫,多获取几页音频等等。感兴趣的可以点赞收藏,我是wangzirui32,我们下次再见! |
CopyRight 2018-2019 实验室设备网 版权所有 |